package com.onlinevideo.util;

import com.onlinevideo.dao.BaseDao;
import com.onlinevideo.dao.PageBase;
import com.onlinevideo.entity.Page;
import com.onlinevideo.entity.User;

import java.util.ArrayList;
import java.util.List;

public class PageUtils {
    /**
     * 获取需要分页类型的Page对象
     *
     * @param pageSize 每页记录条数
     * @param pageNo   当前页数
     * @param dao      传入相应类的dao
     * @param <T>      类型
     * @return page对象
     */
    public static <T> Page<T> getPage(Integer pageSize, Integer pageNo, PageBase<T> dao) {

        Page<T> page = new Page<>(pageSize, pageNo);
        pageSize = page.getPageSize();
        Integer pageTotalCount = dao.queryForPageTotalCount();
        page.setTotalCount(pageTotalCount);
        int i = pageTotalCount / pageSize;
        page.setPageCount(pageTotalCount % pageSize == 0 ? i : i + 1);
        List<T> objs = dao.queryForPageItems(page.getBegin(), page.getPageSize());
        page.setData(objs);
        return page;
    }
    /**
     * 获取需要分页类型的Page对象
     *
     * @param pageSize 每页记录条数
     * @param pageNo   当前页数
     * @param dao      传入相应类的dao
     * @param <T>      类型
     * @param t 传入参数，非空则添加条件查询
     * @return page对象
     */
    public static <T> Page<T> getPage(Integer pageSize, Integer pageNo, PageBase<T> dao, T t) {

        Page<T> page = new Page<>(pageSize, pageNo);
        pageSize = page.getPageSize();
        Integer pageTotalCount = dao.queryForPageTotalCount(t);
        page.setTotalCount(pageTotalCount);
        int i = pageTotalCount / pageSize;
        page.setPageCount(pageTotalCount % pageSize == 0 ? i : i + 1);
        List<T> objs = dao.queryForPageItems(page.getBegin(), page.getPageSize(), t);
        page.setData(objs);
        return page;
    }

    public static <T> List<T> limit(Integer begin, Integer length, List<T> list) {
        List<T> ts = new ArrayList<>();
        for (int i = begin; i < begin + length && i < list.size(); i++) {
            ts.add(list.get(i));
        }
        return ts;
    }
}
